package br.com.repassi.tela;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import br.com.repassi.android_02_aberturadetelas.R;

public class MenuActivity extends Activity {

	private static final String CATEGORIA = "android-03-teladelista";

	// Menu principal
	private static final int INSERIR = 0;
	private static final int EDITAR = 1;
	private static final int EXCLUIR = 2;
	
	private int posicao;

	private ArrayList<String> clientes;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_menu);

		clientes = new ArrayList();
		clientes.add("Exemplo1");
		clientes.add("Exemplo2");

		atualizarLista();
	}

	private void atualizarLista() {
		ListView list = (ListView) findViewById(R.id.listaDeClientesView);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				R.layout.activity_item_cliente, clientes);
		list.setAdapter(adapter);
		
		registerForContextMenu(list);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		if (v.getId() == R.id.listaDeClientesView) {
			menu.setHeaderTitle("Menu");
			menu.add(Menu.NONE, EDITAR, EDITAR, "Editar");
			menu.add(Menu.NONE, EXCLUIR, EXCLUIR, "Excluir");
		}			
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.menu, menu);
		MenuItem mn = menu.add(0, INSERIR, 0, "Inserir");
		mn.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
		menu.add(0, EDITAR, 0, "Editar");
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// Clicou no menu
		
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
				.getMenuInfo();

		Intent it;
		switch (item.getItemId()) {
		case INSERIR:
			Log.i(CATEGORIA, "Opcao inserir novo selecionada");
			it = new Intent(this, InserirClienteActivity.class);
			startActivityForResult(it, INSERIR);
			break;
		case EDITAR:
			Log.i(CATEGORIA, "Opcao editar selecionada");

			Bundle params = new Bundle();
			params.putString("nomeCliente", clientes.get(info.position));

			it = new Intent(this, EditarClienteActivity.class);
			it.putExtras(params);

			startActivityForResult(it, EDITAR);

			break;
		case EXCLUIR:
			Log.i(CATEGORIA, "Opcao excluir selecionada");
			posicao = info.position;
			removerCliente();
			break;
		}
		return true;

	}
	
	private void removerCliente() {
		
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setMessage("Deseja realmente remover o cliente?");
		
		dialog.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Sim");
				
				clientes.remove(posicao);
				atualizarLista();
			}
		});

		// botao nao executa algo se o botao nao for pressionado
		dialog.setNegativeButton("Nao", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Nao");
			}
		});
		dialog.setTitle("Aviso");
		dialog.show();
	}

	protected void onActivityResult(int codigo, int resultado, Intent intent) {
		Log.i(CATEGORIA, "Recebendo resultado.");

		if (codigo == INSERIR) {
			Log.i(CATEGORIA, "Recebendo resultado do Inserir.");

			if (resultado == RESULT_OK) {
				Log.i(CATEGORIA, "Botao Salvar selecionado.");

				if (intent != null) {

					Bundle params = intent.getExtras();
					if (params != null) {

						String nome = params.getString("nomeCliente");
						clientes.add(nome);
						atualizarLista();
					}
				}
			} else {
				Log.i(CATEGORIA, "Botao Cancelar selecionado.");
			}
		}

		if (codigo == EDITAR) {
			Log.i(CATEGORIA, "Recebendo resultado do Editar.");

			if (resultado == RESULT_OK) {
				Log.i(CATEGORIA, "Botao Salvar selecionado.");
				if (intent != null) {

					Bundle params = intent.getExtras();
					if (params != null) {

						String nome = params.getString("nomeCliente");
						clientes.add(nome);
						atualizarLista();
					}
				}
			} else {
				Log.i(CATEGORIA, "Botao Cancelar selecionado.");
			}
		}
	}
}
